#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QList>
#include "gridwidget.h"
#include "logic.h"
#include "timer.h"

QT_FORWARD_DECLARE_CLASS( GridWidget )
QT_FORWARD_DECLARE_CLASS( Logic )

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
    
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void createNewGame();
    void solveGame();
    void showManual();
    
    void setEasy();
    void setMedium();
    void setHard();

    /** \fn pause()
    *
    *   \brief Die Methode pausiert das Spiel, d.h. bestimmte Funktionalitaeten werden nicht moeglich,
    *           bestimmte Buttons werden deaktiviert, Stopuhr gestoppt und Spielfeld ausgeblendet.
    *           Beim erneutem Druecken dieser Taste wird das Spiel fortgesetzt und Buttons wieder aktiviert.
    *
    *   \return Die Methode hat keinen Rueckgabewert.
    */
    void pause();


    /** \fn help
    *
    *   \brief Die Methode blendet eine zufaellige Zelle im Spielfeld ein. Es ist nicht moeglich eine bestimmte Zelle
    *           anzeigen zu lassen. Die Zelle wird immer zufaellig ausgewaehlt.
    *
    *   \return Die Methode hat keinen Rueckgabewert.
    */
    void help();


    /** \fn check()
    *
    *   \brief Die Methode prueft die vom Spieler gesetzte Zahlen auf ihre Korrektheit. Die richtigen Eingaben werden
    *           gruen markiert und Zellen werden festgesetzt (deaktiviert , d.h. eine erneute Eingabe ist nicht moeglich),
    *           die falschen werden entsprechend rot markiert.
    *           Anschliessend wird noch die Methode aufgerufen, um zu pruefen, ob das Spiel vielleicht schon richtig geloest ist.
    *
    *   \return Die Methode hat keinen Rueckgabewert.
    */
    void check();

private:
    Ui::MainWindow *ui;

    Logic* m_logic;
    Timer* m_timer;

    QList< GridWidget* > m_gridList;

    void isWon();
};

#endif // MAINWINDOW_H
